package process

import (
	"encoding/json"
	"fmt"
	"my-go-chat/message"
	"my-go-chat/utils"
	"net"
)

type smsProcess struct {
	//面向对象的编程思路
	//暂时不需要字段
}

//转发消息
func (sp *smsProcess) SendGroupMes(mes message.Message) {
	//不用构建了 可以直接对得到的对象进行群发
	//遍历夫妻的onlineUsers
	//将消息转发取出

	var smsMes message.SmMes
	err := json.Unmarshal([]byte(mes.Data), &smsMes)
	if err != nil {
		fmt.Println("转发消息 反序列化失败！ ", err)
		return
	}
	//这里时要构造发送的数据
	data, err := json.Marshal(mes)
	if err != nil {
		fmt.Println("转发消息 序列化失败！ ", err)
	}
	//这里利用解包后的数据，对转发的对象筛选
	for id, up := range userMgr.onlineUsers { //自已也在里面
		if id == smsMes.UserId { //过滤 消息的来源
			continue
		}
		sp.SendMesToEachOnlineUser(data, up.Conn)
	}
}

func (sp *smsProcess) SendMesToEachOnlineUser(data []byte, conn net.Conn) {
	//创建tf 实例 对data进行发送给
	tf := &utils.Transfer{
		Conn: conn,
	}
	err := tf.WritePkg(data)
	if err != nil {
		fmt.Println("转发群发消息时 发生异常")
	}
}
